<?php

/**
 * Description of Translator
 *
 * @author polacseka
 */
class x10_Translator extends x10_GeneralClass
{
	public $xName = 'Fordító objektum';

	/**
	 * @var x10_LocaleProvider
	 */
	protected $provider;

	protected $data;

	protected $jsonHelper;

	/**
	 * Konstruktor.
	 * A szolgáltató {@link x10_LocaleProvider#localeFilePath adatai alapján}
	 * megkísérli betölteni a szótárat. A szótár egy asszociatív JSON fájl,
	 * az objektum kulcsai az eredeti nyelvnek megfelelő eredeti string-ek,
	 * értékei a lokalizációnak megfelelő nyelven íródott tartalmak.
	 * @param String $provider
	 */
	public function __construct($localeFilePath)
	{
		$this->provider = $provider;
		try
		{
			$this->jsonHelper = new x10_Util_JSON($this->provider->localeFilePath);
			$this->data = $this->jsonHelper->get();
		}
		catch (x10_GeneralException $e)
		{
			// elnyelés, itt nem gond ha hiba van.
		}
	}

	public function translate($what)
	{
		array_shift($args = func_get_args());
		if (is_string($what))
		{
			return $this->translateString($what, $args);
		}
		else if (is_array($what) or is_object($what))
		{
			foreach ($what as $k=>$v)
			{
				$what[$k] = $this->translateString($v, $args);
			}
			return $what;
		}
		else
		{
			return $what;
		}
	}

	protected function translateString($str, $args)
	{
		$trStr = $str;
		if (isset($this->data) and isset($this->data[$str])) $trStr = $this->data[$str];
		return vsprintf($trStr, $args);
	}
}

?>